package pe.edu.upc.dew.grupo04.dao;

import java.util.List;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.jdbc.core.RowMapper;

import pe.edu.upc.dew.grupo04.model.Funcion;
import pe.edu.upc.dew.grupo04.model.Sala;
import pe.edu.upc.dew.grupo04.model.Pelicula;

public class FuncionDaoJdbc extends SimpleJdbcDaoSupport implements FuncionDao {

	private RowMapper<Funcion> mapper;

	public FuncionDaoJdbc() {

		mapper = new RowMapper<Funcion>() {
			public Funcion mapRow(ResultSet rs, int rowNum) throws SQLException {

				Funcion funcion = new Funcion();
				funcion.setCodFuncion(rs.getInt("codFuncion"));
				funcion.setHora(rs.getString("hora"));
				funcion.setPrecio(rs.getDouble("precio"));

				Pelicula pelicula = new Pelicula();
				pelicula.setCodPelicula(rs.getInt("codPelicula"));
				pelicula.setTitulo(rs.getString("titulo"));
				pelicula.setCartelera(rs.getBoolean("cartelera"));
				pelicula.setEstreno(rs.getBoolean("estreno"));
				pelicula.setDuracion(rs.getInt("duracion"));
				pelicula.setGenero(rs.getString("genero"));
				pelicula.setClasificacion(rs.getString("clasificacion"));

				Sala sala = new Sala();
				sala.setCodSala(rs.getInt("codSala"));
				sala.setNombre(rs.getString("nombre"));
				sala.setCapacidad(rs.getInt("capacidad"));

				funcion.setSala(sala);
				funcion.setPelicula(pelicula);

				return funcion;
			}

		};

	}

	@Override
	public void crearFuncion(Funcion funcion) {
		getSimpleJdbcTemplate().update(
				"insert into funcion(codFuncion,codSala,codPelicula,hora,precio)"
						+ " values(?,?,?,?,?)", funcion.getCodFuncion(),
				funcion.getSala().getCodSala(),
				funcion.getPelicula().getCodPelicula(), funcion.getHora(),
				funcion.getPrecio());
	}

	@Override
	public Funcion getFuncionPorCodigo(int codFuncion) {
		return getSimpleJdbcTemplate().queryForObject(
				"select * from funcion where codFuncion=?",
				new BeanPropertyRowMapper<Funcion>(Funcion.class), codFuncion);
	}

	@Override
	public List<Funcion> getFunciones() {
		return getSimpleJdbcTemplate().query("select * from funcion",
				new BeanPropertyRowMapper<Funcion>(Funcion.class));
	}

	@Override
	public void eliminarFuncion(int codFuncion) {
		getSimpleJdbcTemplate().update(
				"delete from funcion where codFuncion=?", codFuncion);
	}

	@Override
	public int getCountFuncion(int codFuncion){

		List<Funcion> Funciones = getSimpleJdbcTemplate().query("select * from funcion where codFuncion =?",
				new BeanPropertyRowMapper<Funcion>(Funcion.class), codFuncion);

		return Funciones.size();

		
		
	}
}
